package cn.edu.zafu.bigdata.YinMingyan.chapter07.zonghe;

import java.io.*;
import java.util.*;

// 学生管理类，负责学生信息的增删改查和文件操作
public class StudentManager {
    private static final String FILE_NAME = "files/students0105.txt"; //存储学生信息的文件名
    private Map<String, Student> students = new HashMap<>(); // 使用HashMap存储学生信息，键为学号

    // 构造方法，加载学生信息
    public StudentManager() {
        loadStudents();
    }

    // 添加学生信息
    public void addStudent() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入学号：");
        String id = scanner.nextLine();
        if (students.containsKey(id)) {
            System.out.println("学号重复，请重新输入。");
            return;
        }
        System.out.print("请输入姓名：");
        String name = scanner.nextLine();
        System.out.print("请输入电话：");
        String phone = scanner.nextLine();
        Student student = new Student(id, name, phone);
        students.put(id, student); // 将学生信息添加到HashMap
        saveStudents(); // 保存学生信息到文件
    }

    // 检索学生信息
    public void findStudent() {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.print("请输入学号进行检索（输入QUIT退出）：");
            String id = scanner.nextLine();
            if ("QUIT".equalsIgnoreCase(id)) {
                break;
            }
            Student student = students.get(id);
            if (student != null) {
                System.out.println(student);
            } else {
                System.out.println("未找到该学生");
            }
        }
    }

    // 更新学生信息
    public void updateStudent() {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.print("请输入学号进行更新（输入QUIT退出）：");
            String id = scanner.nextLine();
            if ("QUIT".equalsIgnoreCase(id)) {
                break;
            }
            Student student = students.get(id);
            if (student != null) {
                System.out.print("请输入新的姓名：");
                String name = scanner.nextLine();
                System.out.print("请输入新的电话：");
                String phone = scanner.nextLine();
                student.setName(name);
                student.setPhone(phone);
                saveStudents(); // 更新学生信息到文件
                System.out.println("更新成功");
            } else {
                System.out.println("未找到该学生");
            }
        }
    }

    // 删除学生信息
    public void deleteStudent() {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.print("请输入学号进行删除（输入QUIT退出）：");
            String id = scanner.nextLine();
            if ("QUIT".equalsIgnoreCase(id)) {
                break;
            }
            if (students.remove(id) != null) {
                saveStudents(); // 删除学生信息并保存到文件
                System.out.println("删除成功");
            } else {
                System.out.println("未找到该学生");
            }
        }
    }

    // 从文件加载学生信息
    private void loadStudents() {
        File file = new File(FILE_NAME);
        if (file.exists()) {
            try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) {
                students = (Map<String, Student>) ois.readObject();
            } catch (IOException | ClassNotFoundException e) {
                System.out.println("读取文件时发生错误，将创建一个新的学生信息存储。");
                e.printStackTrace();
                // 如果读取文件失败，清空学生信息
                students = new HashMap<>();
            }
        } else {
            System.out.println("未找到学生信息文件，将创建一个新的学生信息存储。");
            // 文件不存在，创建一个新的HashMap
            students = new HashMap<>();
            // 确保目录存在
            File dir = new File(FILE_NAME).getParentFile();
            if (!dir.exists() && !dir.mkdirs()) {
                System.out.println("无法创建目录：" + dir.getAbsolutePath());
                return;
            }
        }
    }

    // 保存学生信息到文件
    private void saveStudents() {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))) {
            oos.writeObject(students);
        } catch (IOException e) {
            System.out.println("保存文件时发生错误。");
            e.printStackTrace();
        }
    }



}
